package com.lcl.stock.mapper;

import com.lcl.stock.pojo.domain.Stock4EvrDayDomain;
import com.lcl.stock.pojo.domain.Stock4MinuteDomain;
import com.lcl.stock.pojo.domain.StockUpdownDomain;
import com.lcl.stock.pojo.entity.StockRtInfo;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
* @author 28901
* @description 针对表【stock_rt_info(个股详情信息表)】的数据库操作Mapper
* @createDate 2025-02-23 15:32:42
* @Entity com.lcl.stock.pojo.entity.StockRtInfo
*/
public interface StockRtInfoMapper {

    int deleteByPrimaryKey(Long id);

    int insert(StockRtInfo record);

    int insertSelective(StockRtInfo record);

    StockRtInfo selectByPrimaryKey(Long id);

    int updateByPrimaryKeySelective(StockRtInfo record);

    int updateByPrimaryKey(StockRtInfo record);

    /**
     * 查询指定时间点下股票数据集合
     * @param lastDate
     * @return
     */
    List<StockUpdownDomain> getStockInfoByTime(@Param("lastDate") Date lastDate);

    /**
     * 统计最新股票交易日内每分钟的涨跌停的股票数量
     * @param openDate 开始时间
     * @param curTime 截止时间
     * @param i 规定 统计的是涨停:1，还是跌停：0
     * @return
     */
    List<Map> getStockUpDownCount(@Param("opentime") Date openDate,
                                  @Param("curtime") Date curTime,
                                  @Param("i") int i);


    /**
     * 统计指定时间点下股票在各个涨跌区间的数量
     * @param curDate 统计的截止时间
     * @return
     */
    List<Map> getIncreaseRangeInfoByDate(@Param("dateTime")Date curDate);

    /**
     *根据股票编码查询指定时间范围内的分时数据
     * @param openDate 开盘时间
     * @param curDate 截止时间
     * @param stockCode 股票编码
     * @return
     */
    List<Stock4MinuteDomain> getStock4MinuteInfo(@Param("openDate") Date openDate,
                                                 @Param("curDate") Date curDate,
                                                 @Param("stockCode") String stockCode);

    /**
     * 获取指定日期范围内的收盘日期
     * @param code 股票编码
     * @param beginDate 起始时间
     * @param endDate 结束时间
     * @return
     */
    List<Date> getCloseDates(@Param("code") String code,
                             @Param("beginDate") Date beginDate,
                             @Param("endDate") Date endDate);

    /**
     * 获取指定股票在指定日期点下的数据
     * @param code 股票编码
     * @param dates 指定日期集合
     * @return
     */
    List<Stock4EvrDayDomain> getStockCreenDkLineData(@Param("code") String code,
                                                     @Param("dates") List<Date> dates);
//    /**
//     * 查询指定时间范围内股票的日K线数据
//     * @param startDate 起始日期
//     * @param endDate 截止日期
//     * @param stockCode 股票编码
//     * @return
//     */
//    List<Stock4EvrDayDomain> getStock4DkLine(@Param("startDate") Date startDate,
//                                             @Param("endDate") Date endDate,
//                                             @Param("stockCode") String stockCode);

    /**
     * 查询指定时间点下股票的数据，并按照涨幅降序排序的前4条数据
     * @param curDate
     * @return
     */
    List<StockUpdownDomain> getStockInfoIncrease(Date curDate);

}
